package com.zhaopin.leetcode;

/**
 * @author yin.peide
 * @since 2024-04-02
 * <p>
 * 给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表，其中每个字母表示一种不同种类的任务。
 * 任务可以以任意顺序执行，并且每个任务都可以在 1 个单位时间内执行完。
 * 在任何一个单位时间，CPU 可以完成一个任务，或者处于待命状态。
 * 然而，两个相同种类的任务之间必须有长度为整数 n 的冷却时间，因此至少有连续 n 个单位时间内 CPU 在执行不同的任务，或者在待命状态。
 * 你需要计算完成所有任务所需要的最短时间。
 * <p>
 * 作者：宫水三叶的刷题日记
 * 链接：https://juejin.cn/post/7350354672862330932
 * 来源：稀土掘金
 * 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
 */
public class LeetCode621 {

    public static void main(String[] args) {
        System.out.println("a");
    }

}

class Solution {
    public int leastInterval(char[] tasks, int n) {
        int[] cnts = new int[26];
        for (char c : tasks) {
            cnts[c - 'A']++;
        }
        int max = 0, tot = 0;
        for (int i = 0; i < 26; i++) {
            max = Math.max(max, cnts[i]);
        }
        for (int i = 0; i < 26; i++) {
            tot += max == cnts[i] ? 1 : 0;
        }
        return Math.max(tasks.length, (n + 1) * (max - 1) + tot);
    }
}
